import { createWebHashHistory, createRouter } from 'vue-router'
import { useUserStore } from '@/store/user'
import { start, stop } from "@/utils/nprogress"

const routes = [
  {
    path: '/',
    name: 'home',
    component: () => import('@/pages/layout.vue'),
    meta: {
      icon: 'Grid',
      title: "首页"
    },
    children: []
  },
  {
    path: '/login',
    name: 'login',
    component: () => import('@/pages/login.vue'),
    meta: {
      title: "登录"
    }
  }
]

const router = createRouter({
  history: createWebHashHistory(),
  routes,
})

// 全局前置守卫
router.beforeEach(async (to, from, next) => {
  start(); //开启进度条
  const userStore = useUserStore()
  // 判断是否/
  if (to.path == '/' && userStore.menuTree.length != 0){
    let pathUrl = userStore.resultThisRoute()
    return next(pathUrl)
  } 
  // 判断是否进入登录页
  if (to.path != '/login') { //其它页面
    // 判断是否存在token
    if (!userStore.token) return next('/login')
    //存在动态菜单
    if (userStore.menuTree.length != 0) return next()
    // 请求菜单接口
    await userStore.getMenu()
    // 重新跳当前页保证菜单已存在
    next({
      ...to,
      replace: true
    })
     
  } else {
    // 进入登录页清空数据
    await userStore.outLoginClearData()
    next()
  }

})

// 后置拦截
router.afterEach((to, from) => {

  setTimeout(() => {
    stop(); // 页面加载完成时隐藏进度条
  }, 150);

})

// 错误处理
router.onError((error) => {
  // 可以根据需要处理错误，例如显示一个错误页面等。
  router.push('/404')
})

export default router